﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daSyntaxAnalyser.SyntaxTree
{
    using daBase.Objects;

    /// <summary>
    /// Блок объявления переменных
    /// </summary>
    public class VarDeclarationsElement : SyntaxTreeElement, ISectionElementElement
    {
        private bool isstatic;
        private TokenInfo keyword;
        private List<VarDeclarationElement> vars;

        /// <summary>
        /// Являются ли переменные статическими
        /// </summary>
        public bool IsStatic { get { return isstatic; } set { isstatic = value; } }

        /// <summary>
        /// Ключевое слово (var, theadvar)
        /// </summary>
        public TokenInfo KeyWord { get { return keyword; } set { keyword = value; } }

        /// <summary>
        /// Список объявлений
        /// </summary>
        public List<VarDeclarationElement> Vars { get { return vars; } set { vars = value; } }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="IsStatic">являются ли переменные статическими</param>
        /// <param name="KeyWord">ключевое слово (var, theadvar)</param>
        /// <param name="Vars">список объявлений</param>
        /// <param name="Comments">комментарии, относящиеся к элементу</param>
        public VarDeclarationsElement(bool IsStatic, TokenInfo KeyWord, List<VarDeclarationElement> Vars, List<TokenInfo> Comments)
            : base(KeyWord, Comments)
        {
            isstatic = IsStatic;
            keyword = KeyWord;
            vars = Vars;
        }

        /// <summary>
        /// Представление элемента в строковом формате
        /// </summary>
        /// <returns>строковое представление элемента</returns>
        public override string ToString()
        {
            return string.Format("{0}\r\n{1}", keyword, Tabulate(vars.Join("\r\n")));
        }

        /// <summary>
        /// Создание типизированного энумератора
        /// </summary>
        /// <returns>энумератор</returns>
        protected override IEnumerator<ISyntaxTreeElement> CreateEnumerator()
        {
            if (vars != null)
                foreach (VarDeclarationElement var in vars)
                    yield return var;
        }
    }
}
